import { getToken, removeToken, setToken } from '@/utils/auth'
import { getUserInfoApi, loginApi } from '@/api/user'
// 仓库，状态
const state = {
  token: getToken(),

  // 用户基本信息
  userInfo: {}
}
// 同步执行：保存token数据到state
const mutations = {

  // 获取token
  setUserToken(state, token) {
    // 存token到state中
    state.token = token
    // token存储到本地
    setToken(token)
  },

  // 获取用户信息
  setUserInfo(state, userInfo) {
    state.userInfo = userInfo
  },

  // 处理token失效
  loginoutActions(state) {
    state.token = ''
    state.userInfo = {}
    removeToken()
  }
}
// 异步执行：发送登录请求
const actions = {
  async  loginActions(context, loginForm) {
    // 调用封装好的调接口的函数获取token
    const token = await loginApi(loginForm)
    // 调用mutations里的方法setUserToken（）存token
    context.commit('setUserToken', token)
  },

  // 获取用户信息
  async getUserInfoAction(context) {
    const userInfo = await getUserInfoApi()
    // console.log(userInfo)
    context.commit('setUserInfo', userInfo)
  },

  // 处理token失效
  loginoutActions(context) {
    context.commit('loginoutActions')
  }
}

export default {
  // 开启命名空间
  // 在vuex中划分模块时必须写命名空间
  namespaced: true,
  state,
  mutations,
  actions
}
